// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google Cloud RuntimeConfig API Version v1beta1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://cloud.google.com/deployment-manager/runtime-configurator/'>Google Cloud RuntimeConfig API</a>
 *      <tr><th>API Version<td>v1beta1
 *      <tr><th>API Rev<td>20170224 (785)
 *      <tr><th>API Docs
 *          <td><a href='https://cloud.google.com/deployment-manager/runtime-configurator/'>
 *              https://cloud.google.com/deployment-manager/runtime-configurator/</a>
 *      <tr><th>Discovery Name<td>runtimeconfig
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google Cloud RuntimeConfig API can be found at
 * <a href='https://cloud.google.com/deployment-manager/runtime-configurator/'>https://cloud.google.com/deployment-manager/runtime-configurator/</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.CloudRuntimeConfig.v1beta1
{
    /// <summary>The CloudRuntimeConfig Service.</summary>
    public class CloudRuntimeConfigService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1beta1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public CloudRuntimeConfigService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public CloudRuntimeConfigService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            projects = new ProjectsResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "runtimeconfig"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://runtimeconfig.googleapis.com/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return ""; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google Cloud RuntimeConfig API.</summary>
        public class Scope
        {
            /// <summary>View and manage your data across Google Cloud Platform services</summary>
            public static string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";

            /// <summary>Manage your Google Cloud Platform services' runtime configuration</summary>
            public static string Cloudruntimeconfig = "https://www.googleapis.com/auth/cloudruntimeconfig";

        }



        private readonly ProjectsResource projects;

        /// <summary>Gets the Projects resource.</summary>
        public virtual ProjectsResource Projects
        {
            get { return projects; }
        }
    }

    ///<summary>A base abstract class for CloudRuntimeConfig requests.</summary>
    public abstract class CloudRuntimeConfigBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new CloudRuntimeConfigBaseServiceRequest instance.</summary>
        protected CloudRuntimeConfigBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>V1 error format.</summary>
        [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<XgafvEnum> Xgafv { get; set; }

        /// <summary>V1 error format.</summary>
        public enum XgafvEnum
        {
            /// <summary>v1 error format</summary>
            [Google.Apis.Util.StringValueAttribute("1")]
            Value1,
            /// <summary>v2 error format</summary>
            [Google.Apis.Util.StringValueAttribute("2")]
            Value2,
        }

        /// <summary>OAuth access token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string AccessToken { get; set; }

        /// <summary>Data format for response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
            /// <summary>Media download with context-dependent Content-Type</summary>
            [Google.Apis.Util.StringValueAttribute("media")]
            Media,
            /// <summary>Responses with Content-Type of application/x-protobuf</summary>
            [Google.Apis.Util.StringValueAttribute("proto")]
            Proto,
        }

        /// <summary>OAuth bearer token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("bearer_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string BearerToken { get; set; }

        /// <summary>JSONP</summary>
        [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Callback { get; set; }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Pretty-print response.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("pp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> Pp { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>Legacy upload protocol for media (e.g. "media", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadType { get; set; }

        /// <summary>Upload protocol for media (e.g. "raw", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadProtocol { get; set; }

        /// <summary>Initializes CloudRuntimeConfig parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "$.xgafv", new Google.Apis.Discovery.Parameter
                {
                    Name = "$.xgafv",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "access_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "access_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "bearer_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "bearer_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "callback", new Google.Apis.Discovery.Parameter
                {
                    Name = "callback",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "pp", new Google.Apis.Discovery.Parameter
                {
                    Name = "pp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "uploadType", new Google.Apis.Discovery.Parameter
                {
                    Name = "uploadType",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "upload_protocol", new Google.Apis.Discovery.Parameter
                {
                    Name = "upload_protocol",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "projects" collection of methods.</summary>
    public class ProjectsResource
    {
        private const string Resource = "projects";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ProjectsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            configs = new ConfigsResource(service);

        }

        private readonly ConfigsResource configs;

        /// <summary>Gets the Configs resource.</summary>
        public virtual ConfigsResource Configs
        {
            get { return configs; }
        }

        /// <summary>The "configs" collection of methods.</summary>
        public class ConfigsResource
        {
            private const string Resource = "configs";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public ConfigsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;
                operations = new OperationsResource(service);
                variables = new VariablesResource(service);
                waiters = new WaitersResource(service);

            }

            private readonly OperationsResource operations;

            /// <summary>Gets the Operations resource.</summary>
            public virtual OperationsResource Operations
            {
                get { return operations; }
            }

            /// <summary>The "operations" collection of methods.</summary>
            public class OperationsResource
            {
                private const string Resource = "operations";

                /// <summary>The service which this resource belongs to.</summary>
                private readonly Google.Apis.Services.IClientService service;

                /// <summary>Constructs a new resource.</summary>
                public OperationsResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;

                }


                /// <summary>Gets the latest state of a long-running operation.  Clients can use this method to poll the
                /// operation result at intervals as recommended by the API service.</summary>
                /// <param name="name">The name of the operation resource.</param>
                public virtual GetRequest Get(string name)
                {
                    return new GetRequest(service, name);
                }

                /// <summary>Gets the latest state of a long-running operation.  Clients can use this method to poll the
                /// operation result at intervals as recommended by the API service.</summary>
                public class GetRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.Operation>
                {
                    /// <summary>Constructs a new Get request.</summary>
                    public GetRequest(Google.Apis.Services.IClientService service, string name)
                        : base(service)
                    {
                        Name = name;
                        InitParameters();
                    }


                    /// <summary>The name of the operation resource.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "get"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+name}"; }
                    }

                    /// <summary>Initializes Get parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "name", new Google.Apis.Discovery.Parameter
                            {
                                Name = "name",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+/operations/.+$",
                            });
                    }

                }

                /// <summary>Returns permissions that a caller has on the specified resource. If the resource does not
                /// exist, this will return an empty set of permissions, not a NOT_FOUND error.
                ///
                /// Note: This operation is designed to be used for building permission-aware UIs and command-line
                /// tools, not for authorization checking. This operation may "fail open" without warning.</summary>
                /// <param name="resource">REQUIRED: The resource for which the policy detail is being requested. See the operation
                /// documentation for the appropriate value for this field.</param>
                public virtual TestIamPermissionsRequest TestIamPermissions(string resource)
                {
                    return new TestIamPermissionsRequest(service, resource);
                }

                /// <summary>Returns permissions that a caller has on the specified resource. If the resource does not
                /// exist, this will return an empty set of permissions, not a NOT_FOUND error.
                ///
                /// Note: This operation is designed to be used for building permission-aware UIs and command-line
                /// tools, not for authorization checking. This operation may "fail open" without warning.</summary>
                public class TestIamPermissionsRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.TestIamPermissionsResponse>
                {
                    /// <summary>Constructs a new TestIamPermissions request.</summary>
                    public TestIamPermissionsRequest(Google.Apis.Services.IClientService service, string resource)
                        : base(service)
                    {
                        Resource = resource;
                        InitParameters();
                    }


                    /// <summary>REQUIRED: The resource for which the policy detail is being requested. See the
                    /// operation documentation for the appropriate value for this field.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Resource { get; private set; }

                    /// <summary>The set of permissions to check for the `resource`. Permissions with wildcards (such as
                    /// '*' or 'storage.*') are not allowed. For more information see [IAM
                    /// Overview](https://cloud.google.com/iam/docs/overview#permissions).</summary>
                    [Google.Apis.Util.RequestParameterAttribute("permissions", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual Google.Apis.Util.Repeatable<string> Permissions { get; set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "testIamPermissions"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+resource}:testIamPermissions"; }
                    }

                    /// <summary>Initializes TestIamPermissions parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "resource", new Google.Apis.Discovery.Parameter
                            {
                                Name = "resource",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+/operations/.+$",
                            });
                        RequestParameters.Add(
                            "permissions", new Google.Apis.Discovery.Parameter
                            {
                                Name = "permissions",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }
            }
            private readonly VariablesResource variables;

            /// <summary>Gets the Variables resource.</summary>
            public virtual VariablesResource Variables
            {
                get { return variables; }
            }

            /// <summary>The "variables" collection of methods.</summary>
            public class VariablesResource
            {
                private const string Resource = "variables";

                /// <summary>The service which this resource belongs to.</summary>
                private readonly Google.Apis.Services.IClientService service;

                /// <summary>Constructs a new resource.</summary>
                public VariablesResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;

                }


                /// <summary>Creates a variable within the given configuration. You cannot create a variable with a name
                /// that is a prefix of an existing variable name, or a name that has an existing variable name as a
                /// prefix.
                ///
                /// To learn more about creating a variable, read the [Setting and Getting Data](/deployment-manager
                /// /runtime-configurator/set-and-get-variables) documentation.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="parent">The path to the RutimeConfig resource that this variable should belong to. The configuration
                /// must exist beforehand; the path must by in the format:
                ///
                /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</param>
                public virtual CreateRequest Create(Google.Apis.CloudRuntimeConfig.v1beta1.Data.Variable body, string parent)
                {
                    return new CreateRequest(service, body, parent);
                }

                /// <summary>Creates a variable within the given configuration. You cannot create a variable with a name
                /// that is a prefix of an existing variable name, or a name that has an existing variable name as a
                /// prefix.
                ///
                /// To learn more about creating a variable, read the [Setting and Getting Data](/deployment-manager
                /// /runtime-configurator/set-and-get-variables) documentation.</summary>
                public class CreateRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.Variable>
                {
                    /// <summary>Constructs a new Create request.</summary>
                    public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudRuntimeConfig.v1beta1.Data.Variable body, string parent)
                        : base(service)
                    {
                        Parent = parent;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>The path to the RutimeConfig resource that this variable should belong to. The
                    /// configuration must exist beforehand; the path must by in the format:
                    ///
                    /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</summary>
                    [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Parent { get; private set; }

                    /// <summary>An optional but recommended unique `request_id`. If the server receives two `create()`
                    /// requests  with the same `request_id`, then the second request will be ignored and the first
                    /// resource created and stored in the backend is returned. Empty `request_id` fields are ignored.
                    ///
                    /// It is responsibility of the client to ensure uniqueness of the `request_id` strings.
                    ///
                    /// `request_id` strings are limited to 64 characters.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("requestId", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string RequestId { get; set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.CloudRuntimeConfig.v1beta1.Data.Variable Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "create"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "POST"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+parent}/variables"; }
                    }

                    /// <summary>Initializes Create parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "parent", new Google.Apis.Discovery.Parameter
                            {
                                Name = "parent",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+$",
                            });
                        RequestParameters.Add(
                            "requestId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "requestId",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Deletes a variable or multiple variables.
                ///
                /// If you specify a variable name, then that variable is deleted. If you specify a prefix and
                /// `recursive` is true, then all variables with that prefix are deleted. You must set a `recursive` to
                /// true if you delete variables by prefix.</summary>
                /// <param name="name">The name of the variable to delete, in the format:
                ///
                /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]`</param>
                public virtual DeleteRequest Delete(string name)
                {
                    return new DeleteRequest(service, name);
                }

                /// <summary>Deletes a variable or multiple variables.
                ///
                /// If you specify a variable name, then that variable is deleted. If you specify a prefix and
                /// `recursive` is true, then all variables with that prefix are deleted. You must set a `recursive` to
                /// true if you delete variables by prefix.</summary>
                public class DeleteRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.Empty>
                {
                    /// <summary>Constructs a new Delete request.</summary>
                    public DeleteRequest(Google.Apis.Services.IClientService service, string name)
                        : base(service)
                    {
                        Name = name;
                        InitParameters();
                    }


                    /// <summary>The name of the variable to delete, in the format:
                    ///
                    /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]`</summary>
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }

                    /// <summary>Set to `true` to recursively delete multiple variables with the same prefix.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("recursive", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<bool> Recursive { get; set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "delete"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "DELETE"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+name}"; }
                    }

                    /// <summary>Initializes Delete parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "name", new Google.Apis.Discovery.Parameter
                            {
                                Name = "name",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+/variables/.+$",
                            });
                        RequestParameters.Add(
                            "recursive", new Google.Apis.Discovery.Parameter
                            {
                                Name = "recursive",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Gets information about a single variable.</summary>
                /// <param name="name">The name of the variable to return, in the format:
                ///
                /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIBLE_NAME]`</param>
                public virtual GetRequest Get(string name)
                {
                    return new GetRequest(service, name);
                }

                /// <summary>Gets information about a single variable.</summary>
                public class GetRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.Variable>
                {
                    /// <summary>Constructs a new Get request.</summary>
                    public GetRequest(Google.Apis.Services.IClientService service, string name)
                        : base(service)
                    {
                        Name = name;
                        InitParameters();
                    }


                    /// <summary>The name of the variable to return, in the format:
                    ///
                    /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIBLE_NAME]`</summary>
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "get"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+name}"; }
                    }

                    /// <summary>Initializes Get parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "name", new Google.Apis.Discovery.Parameter
                            {
                                Name = "name",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+/variables/.+$",
                            });
                    }

                }

                /// <summary>Lists variables within given a configuration, matching any provided filters. This only
                /// lists variable names, not the values, unless `return_values` is true, in which case only variables
                /// that user has IAM permission to GetVariable will be returned.</summary>
                /// <param name="parent">The path to the RuntimeConfig resource for which you want to list variables. The configuration
                /// must exist beforehand; the path must by in the format:
                ///
                /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</param>
                public virtual ListRequest List(string parent)
                {
                    return new ListRequest(service, parent);
                }

                /// <summary>Lists variables within given a configuration, matching any provided filters. This only
                /// lists variable names, not the values, unless `return_values` is true, in which case only variables
                /// that user has IAM permission to GetVariable will be returned.</summary>
                public class ListRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.ListVariablesResponse>
                {
                    /// <summary>Constructs a new List request.</summary>
                    public ListRequest(Google.Apis.Services.IClientService service, string parent)
                        : base(service)
                    {
                        Parent = parent;
                        InitParameters();
                    }


                    /// <summary>The path to the RuntimeConfig resource for which you want to list variables. The
                    /// configuration must exist beforehand; the path must by in the format:
                    ///
                    /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</summary>
                    [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Parent { get; private set; }

                    /// <summary>Filters variables by matching the specified filter. For example:
                    ///
                    /// `projects/example-project/config/[CONFIG_NAME]/variables/example-variable`.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string Filter { get; set; }

                    /// <summary>Specifies a page token to use. Set `pageToken` to a `nextPageToken` returned by a
                    /// previous list request to get the next page of results.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string PageToken { get; set; }

                    /// <summary>The flag indicates whether the user wants to return values of variables. If true, then
                    /// only those variables that user has IAM GetVariable permission will be returned along with their
                    /// values.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("returnValues", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<bool> ReturnValues { get; set; }

                    /// <summary>Specifies the number of results to return per page. If there are fewer elements than
                    /// the specified number, returns all elements.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<int> PageSize { get; set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "list"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+parent}/variables"; }
                    }

                    /// <summary>Initializes List parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "parent", new Google.Apis.Discovery.Parameter
                            {
                                Name = "parent",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+$",
                            });
                        RequestParameters.Add(
                            "filter", new Google.Apis.Discovery.Parameter
                            {
                                Name = "filter",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "pageToken", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageToken",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "returnValues", new Google.Apis.Discovery.Parameter
                            {
                                Name = "returnValues",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "pageSize", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageSize",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Returns permissions that a caller has on the specified resource. If the resource does not
                /// exist, this will return an empty set of permissions, not a NOT_FOUND error.
                ///
                /// Note: This operation is designed to be used for building permission-aware UIs and command-line
                /// tools, not for authorization checking. This operation may "fail open" without warning.</summary>
                /// <param name="resource">REQUIRED: The resource for which the policy detail is being requested. See the operation
                /// documentation for the appropriate value for this field.</param>
                public virtual TestIamPermissionsRequest TestIamPermissions(string resource)
                {
                    return new TestIamPermissionsRequest(service, resource);
                }

                /// <summary>Returns permissions that a caller has on the specified resource. If the resource does not
                /// exist, this will return an empty set of permissions, not a NOT_FOUND error.
                ///
                /// Note: This operation is designed to be used for building permission-aware UIs and command-line
                /// tools, not for authorization checking. This operation may "fail open" without warning.</summary>
                public class TestIamPermissionsRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.TestIamPermissionsResponse>
                {
                    /// <summary>Constructs a new TestIamPermissions request.</summary>
                    public TestIamPermissionsRequest(Google.Apis.Services.IClientService service, string resource)
                        : base(service)
                    {
                        Resource = resource;
                        InitParameters();
                    }


                    /// <summary>REQUIRED: The resource for which the policy detail is being requested. See the
                    /// operation documentation for the appropriate value for this field.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Resource { get; private set; }

                    /// <summary>The set of permissions to check for the `resource`. Permissions with wildcards (such as
                    /// '*' or 'storage.*') are not allowed. For more information see [IAM
                    /// Overview](https://cloud.google.com/iam/docs/overview#permissions).</summary>
                    [Google.Apis.Util.RequestParameterAttribute("permissions", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual Google.Apis.Util.Repeatable<string> Permissions { get; set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "testIamPermissions"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+resource}:testIamPermissions"; }
                    }

                    /// <summary>Initializes TestIamPermissions parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "resource", new Google.Apis.Discovery.Parameter
                            {
                                Name = "resource",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+/variables/.+$",
                            });
                        RequestParameters.Add(
                            "permissions", new Google.Apis.Discovery.Parameter
                            {
                                Name = "permissions",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Updates an existing variable with a new value.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="name">The name of the variable to update, in the format:
                ///
                /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]`</param>
                public virtual UpdateRequest Update(Google.Apis.CloudRuntimeConfig.v1beta1.Data.Variable body, string name)
                {
                    return new UpdateRequest(service, body, name);
                }

                /// <summary>Updates an existing variable with a new value.</summary>
                public class UpdateRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.Variable>
                {
                    /// <summary>Constructs a new Update request.</summary>
                    public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudRuntimeConfig.v1beta1.Data.Variable body, string name)
                        : base(service)
                    {
                        Name = name;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>The name of the variable to update, in the format:
                    ///
                    /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]`</summary>
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.CloudRuntimeConfig.v1beta1.Data.Variable Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "update"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "PUT"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+name}"; }
                    }

                    /// <summary>Initializes Update parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "name", new Google.Apis.Discovery.Parameter
                            {
                                Name = "name",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+/variables/.+$",
                            });
                    }

                }

                /// <summary>Watches a specific variable and waits for a change in the variable's value. When there is a
                /// change, this method returns the new value or times out.
                ///
                /// If a variable is deleted while being watched, the `variableState` state is set to `DELETED` and the
                /// method returns the last known variable `value`.
                ///
                /// If you set the deadline for watching to a larger value than internal timeout (60 seconds), the
                /// current variable value is returned and the `variableState` will be `VARIABLE_STATE_UNSPECIFIED`.
                ///
                /// To learn more about creating a watcher, read the [Watching a Variable for Changes](/deployment-
                /// manager/runtime-configurator/watching-a-variable) documentation.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="name">The name of the variable to watch, in the format:
                ///
                /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</param>
                public virtual WatchRequest Watch(Google.Apis.CloudRuntimeConfig.v1beta1.Data.WatchVariableRequest body, string name)
                {
                    return new WatchRequest(service, body, name);
                }

                /// <summary>Watches a specific variable and waits for a change in the variable's value. When there is a
                /// change, this method returns the new value or times out.
                ///
                /// If a variable is deleted while being watched, the `variableState` state is set to `DELETED` and the
                /// method returns the last known variable `value`.
                ///
                /// If you set the deadline for watching to a larger value than internal timeout (60 seconds), the
                /// current variable value is returned and the `variableState` will be `VARIABLE_STATE_UNSPECIFIED`.
                ///
                /// To learn more about creating a watcher, read the [Watching a Variable for Changes](/deployment-
                /// manager/runtime-configurator/watching-a-variable) documentation.</summary>
                public class WatchRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.Variable>
                {
                    /// <summary>Constructs a new Watch request.</summary>
                    public WatchRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudRuntimeConfig.v1beta1.Data.WatchVariableRequest body, string name)
                        : base(service)
                    {
                        Name = name;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>The name of the variable to watch, in the format:
                    ///
                    /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</summary>
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.CloudRuntimeConfig.v1beta1.Data.WatchVariableRequest Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "watch"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "POST"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+name}:watch"; }
                    }

                    /// <summary>Initializes Watch parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "name", new Google.Apis.Discovery.Parameter
                            {
                                Name = "name",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+/variables/.+$",
                            });
                    }

                }
            }
            private readonly WaitersResource waiters;

            /// <summary>Gets the Waiters resource.</summary>
            public virtual WaitersResource Waiters
            {
                get { return waiters; }
            }

            /// <summary>The "waiters" collection of methods.</summary>
            public class WaitersResource
            {
                private const string Resource = "waiters";

                /// <summary>The service which this resource belongs to.</summary>
                private readonly Google.Apis.Services.IClientService service;

                /// <summary>Constructs a new resource.</summary>
                public WaitersResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;

                }


                /// <summary>Creates a Waiter resource. This operation returns a long-running Operation resource which
                /// can be polled for completion. However, a waiter with the given name will exist (and can be
                /// retrieved) prior to the operation completing. If the operation fails, the failed Waiter resource
                /// will still exist and must be deleted prior to subsequent creation attempts.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="parent">The path to the configuration that will own the waiter. The configuration must exist
                /// beforehand; the path must by in the format:
                ///
                /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`.</param>
                public virtual CreateRequest Create(Google.Apis.CloudRuntimeConfig.v1beta1.Data.Waiter body, string parent)
                {
                    return new CreateRequest(service, body, parent);
                }

                /// <summary>Creates a Waiter resource. This operation returns a long-running Operation resource which
                /// can be polled for completion. However, a waiter with the given name will exist (and can be
                /// retrieved) prior to the operation completing. If the operation fails, the failed Waiter resource
                /// will still exist and must be deleted prior to subsequent creation attempts.</summary>
                public class CreateRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.Operation>
                {
                    /// <summary>Constructs a new Create request.</summary>
                    public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudRuntimeConfig.v1beta1.Data.Waiter body, string parent)
                        : base(service)
                    {
                        Parent = parent;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>The path to the configuration that will own the waiter. The configuration must exist
                    /// beforehand; the path must by in the format:
                    ///
                    /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Parent { get; private set; }

                    /// <summary>An optional but recommended unique `request_id`. If the server receives two `create()`
                    /// requests  with the same `request_id`, then the second request will be ignored and the first
                    /// resource created and stored in the backend is returned. Empty `request_id` fields are ignored.
                    ///
                    /// It is responsibility of the client to ensure uniqueness of the `request_id` strings.
                    ///
                    /// `request_id` strings are limited to 64 characters.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("requestId", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string RequestId { get; set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.CloudRuntimeConfig.v1beta1.Data.Waiter Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "create"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "POST"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+parent}/waiters"; }
                    }

                    /// <summary>Initializes Create parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "parent", new Google.Apis.Discovery.Parameter
                            {
                                Name = "parent",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+$",
                            });
                        RequestParameters.Add(
                            "requestId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "requestId",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Deletes the waiter with the specified name.</summary>
                /// <param name="name">The Waiter resource to delete, in the format:
                ///
                ///  `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]`</param>
                public virtual DeleteRequest Delete(string name)
                {
                    return new DeleteRequest(service, name);
                }

                /// <summary>Deletes the waiter with the specified name.</summary>
                public class DeleteRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.Empty>
                {
                    /// <summary>Constructs a new Delete request.</summary>
                    public DeleteRequest(Google.Apis.Services.IClientService service, string name)
                        : base(service)
                    {
                        Name = name;
                        InitParameters();
                    }


                    /// <summary>The Waiter resource to delete, in the format:
                    ///
                    /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]`</summary>
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "delete"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "DELETE"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+name}"; }
                    }

                    /// <summary>Initializes Delete parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "name", new Google.Apis.Discovery.Parameter
                            {
                                Name = "name",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+/waiters/[^/]+$",
                            });
                    }

                }

                /// <summary>Gets information about a single waiter.</summary>
                /// <param name="name">The fully-qualified name of the Waiter resource object to retrieve, in the format:
                ///
                /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]`</param>
                public virtual GetRequest Get(string name)
                {
                    return new GetRequest(service, name);
                }

                /// <summary>Gets information about a single waiter.</summary>
                public class GetRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.Waiter>
                {
                    /// <summary>Constructs a new Get request.</summary>
                    public GetRequest(Google.Apis.Services.IClientService service, string name)
                        : base(service)
                    {
                        Name = name;
                        InitParameters();
                    }


                    /// <summary>The fully-qualified name of the Waiter resource object to retrieve, in the format:
                    ///
                    /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]`</summary>
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "get"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+name}"; }
                    }

                    /// <summary>Initializes Get parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "name", new Google.Apis.Discovery.Parameter
                            {
                                Name = "name",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+/waiters/[^/]+$",
                            });
                    }

                }

                /// <summary>List waiters within the given configuration.</summary>
                /// <param name="parent">The path to the configuration for which you want to get a list of waiters. The configuration
                /// must exist beforehand; the path must by in the format:
                ///
                /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</param>
                public virtual ListRequest List(string parent)
                {
                    return new ListRequest(service, parent);
                }

                /// <summary>List waiters within the given configuration.</summary>
                public class ListRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.ListWaitersResponse>
                {
                    /// <summary>Constructs a new List request.</summary>
                    public ListRequest(Google.Apis.Services.IClientService service, string parent)
                        : base(service)
                    {
                        Parent = parent;
                        InitParameters();
                    }


                    /// <summary>The path to the configuration for which you want to get a list of waiters. The
                    /// configuration must exist beforehand; the path must by in the format:
                    ///
                    /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</summary>
                    [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Parent { get; private set; }

                    /// <summary>Specifies a page token to use. Set `pageToken` to a `nextPageToken` returned by a
                    /// previous list request to get the next page of results.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string PageToken { get; set; }

                    /// <summary>Specifies the number of results to return per page. If there are fewer elements than
                    /// the specified number, returns all elements.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<int> PageSize { get; set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "list"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+parent}/waiters"; }
                    }

                    /// <summary>Initializes List parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "parent", new Google.Apis.Discovery.Parameter
                            {
                                Name = "parent",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+$",
                            });
                        RequestParameters.Add(
                            "pageToken", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageToken",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "pageSize", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageSize",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Returns permissions that a caller has on the specified resource. If the resource does not
                /// exist, this will return an empty set of permissions, not a NOT_FOUND error.
                ///
                /// Note: This operation is designed to be used for building permission-aware UIs and command-line
                /// tools, not for authorization checking. This operation may "fail open" without warning.</summary>
                /// <param name="resource">REQUIRED: The resource for which the policy detail is being requested. See the operation
                /// documentation for the appropriate value for this field.</param>
                public virtual TestIamPermissionsRequest TestIamPermissions(string resource)
                {
                    return new TestIamPermissionsRequest(service, resource);
                }

                /// <summary>Returns permissions that a caller has on the specified resource. If the resource does not
                /// exist, this will return an empty set of permissions, not a NOT_FOUND error.
                ///
                /// Note: This operation is designed to be used for building permission-aware UIs and command-line
                /// tools, not for authorization checking. This operation may "fail open" without warning.</summary>
                public class TestIamPermissionsRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.TestIamPermissionsResponse>
                {
                    /// <summary>Constructs a new TestIamPermissions request.</summary>
                    public TestIamPermissionsRequest(Google.Apis.Services.IClientService service, string resource)
                        : base(service)
                    {
                        Resource = resource;
                        InitParameters();
                    }


                    /// <summary>REQUIRED: The resource for which the policy detail is being requested. See the
                    /// operation documentation for the appropriate value for this field.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Resource { get; private set; }

                    /// <summary>The set of permissions to check for the `resource`. Permissions with wildcards (such as
                    /// '*' or 'storage.*') are not allowed. For more information see [IAM
                    /// Overview](https://cloud.google.com/iam/docs/overview#permissions).</summary>
                    [Google.Apis.Util.RequestParameterAttribute("permissions", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual Google.Apis.Util.Repeatable<string> Permissions { get; set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "testIamPermissions"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+resource}:testIamPermissions"; }
                    }

                    /// <summary>Initializes TestIamPermissions parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "resource", new Google.Apis.Discovery.Parameter
                            {
                                Name = "resource",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/configs/[^/]+/waiters/[^/]+$",
                            });
                        RequestParameters.Add(
                            "permissions", new Google.Apis.Discovery.Parameter
                            {
                                Name = "permissions",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }
            }

            /// <summary>Creates a new RuntimeConfig resource. The configuration name must be unique within
            /// project.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="parent">The [project ID](https://support.google.com/cloud/answer/6158840?hl=en_topic=6158848) for this
            /// request, in the format `projects/[PROJECT_ID]`.</param>
            public virtual CreateRequest Create(Google.Apis.CloudRuntimeConfig.v1beta1.Data.RuntimeConfig body, string parent)
            {
                return new CreateRequest(service, body, parent);
            }

            /// <summary>Creates a new RuntimeConfig resource. The configuration name must be unique within
            /// project.</summary>
            public class CreateRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.RuntimeConfig>
            {
                /// <summary>Constructs a new Create request.</summary>
                public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudRuntimeConfig.v1beta1.Data.RuntimeConfig body, string parent)
                    : base(service)
                {
                    Parent = parent;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The [project ID](https://support.google.com/cloud/answer/6158840?hl=en_topic=6158848) for
                /// this request, in the format `projects/[PROJECT_ID]`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Parent { get; private set; }

                /// <summary>An optional but recommended unique `request_id`. If the server receives two `create()`
                /// requests  with the same `request_id`, then the second request will be ignored and the first resource
                /// created and stored in the backend is returned. Empty `request_id` fields are ignored.
                ///
                /// It is responsibility of the client to ensure uniqueness of the `request_id` strings.
                ///
                /// `request_id` strings are limited to 64 characters.</summary>
                [Google.Apis.Util.RequestParameterAttribute("requestId", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string RequestId { get; set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.CloudRuntimeConfig.v1beta1.Data.RuntimeConfig Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "create"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+parent}/configs"; }
                }

                /// <summary>Initializes Create parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "parent", new Google.Apis.Discovery.Parameter
                        {
                            Name = "parent",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+$",
                        });
                    RequestParameters.Add(
                        "requestId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "requestId",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Deletes a RuntimeConfig resource.</summary>
            /// <param name="name">The RuntimeConfig resource to delete, in the format:
            ///
            /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</param>
            public virtual DeleteRequest Delete(string name)
            {
                return new DeleteRequest(service, name);
            }

            /// <summary>Deletes a RuntimeConfig resource.</summary>
            public class DeleteRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.Empty>
            {
                /// <summary>Constructs a new Delete request.</summary>
                public DeleteRequest(Google.Apis.Services.IClientService service, string name)
                    : base(service)
                {
                    Name = name;
                    InitParameters();
                }


                /// <summary>The RuntimeConfig resource to delete, in the format:
                ///
                /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "delete"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "DELETE"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+name}"; }
                }

                /// <summary>Initializes Delete parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/configs/[^/]+$",
                        });
                }

            }

            /// <summary>Gets information about a RuntimeConfig resource.</summary>
            /// <param name="name">The name of the RuntimeConfig resource to retrieve, in the format:
            ///
            /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</param>
            public virtual GetRequest Get(string name)
            {
                return new GetRequest(service, name);
            }

            /// <summary>Gets information about a RuntimeConfig resource.</summary>
            public class GetRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.RuntimeConfig>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, string name)
                    : base(service)
                {
                    Name = name;
                    InitParameters();
                }


                /// <summary>The name of the RuntimeConfig resource to retrieve, in the format:
                ///
                /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "get"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+name}"; }
                }

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/configs/[^/]+$",
                        });
                }

            }

            /// <summary>Gets the access control policy for a resource. Returns an empty policy if the resource exists
            /// and does not have a policy set.</summary>
            /// <param name="resource">REQUIRED: The resource for which the policy is being requested. See the operation
            /// documentation for the appropriate value for this field.</param>
            public virtual GetIamPolicyRequest GetIamPolicy(string resource)
            {
                return new GetIamPolicyRequest(service, resource);
            }

            /// <summary>Gets the access control policy for a resource. Returns an empty policy if the resource exists
            /// and does not have a policy set.</summary>
            public class GetIamPolicyRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.Policy>
            {
                /// <summary>Constructs a new GetIamPolicy request.</summary>
                public GetIamPolicyRequest(Google.Apis.Services.IClientService service, string resource)
                    : base(service)
                {
                    Resource = resource;
                    InitParameters();
                }


                /// <summary>REQUIRED: The resource for which the policy is being requested. See the operation
                /// documentation for the appropriate value for this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Resource { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "getIamPolicy"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+resource}:getIamPolicy"; }
                }

                /// <summary>Initializes GetIamPolicy parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "resource", new Google.Apis.Discovery.Parameter
                        {
                            Name = "resource",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/configs/[^/]+$",
                        });
                }

            }

            /// <summary>Lists all the RuntimeConfig resources within project.</summary>
            /// <param name="parent">The [project ID](https://support.google.com/cloud/answer/6158840?hl=en_topic=6158848) for this
            /// request, in the format `projects/[PROJECT_ID]`.</param>
            public virtual ListRequest List(string parent)
            {
                return new ListRequest(service, parent);
            }

            /// <summary>Lists all the RuntimeConfig resources within project.</summary>
            public class ListRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.ListConfigsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string parent)
                    : base(service)
                {
                    Parent = parent;
                    InitParameters();
                }


                /// <summary>The [project ID](https://support.google.com/cloud/answer/6158840?hl=en_topic=6158848) for
                /// this request, in the format `projects/[PROJECT_ID]`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Parent { get; private set; }

                /// <summary>Specifies a page token to use. Set `pageToken` to a `nextPageToken` returned by a previous
                /// list request to get the next page of results.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>Specifies the number of results to return per page. If there are fewer elements than the
                /// specified number, returns all elements.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+parent}/configs"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "parent", new Google.Apis.Discovery.Parameter
                        {
                            Name = "parent",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+$",
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Sets the access control policy on the specified resource. Replaces any existing
            /// policy.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="resource">REQUIRED: The resource for which the policy is being specified. See the operation
            /// documentation for the appropriate value for this field.</param>
            public virtual SetIamPolicyRequest SetIamPolicy(Google.Apis.CloudRuntimeConfig.v1beta1.Data.SetIamPolicyRequest body, string resource)
            {
                return new SetIamPolicyRequest(service, body, resource);
            }

            /// <summary>Sets the access control policy on the specified resource. Replaces any existing
            /// policy.</summary>
            public class SetIamPolicyRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.Policy>
            {
                /// <summary>Constructs a new SetIamPolicy request.</summary>
                public SetIamPolicyRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudRuntimeConfig.v1beta1.Data.SetIamPolicyRequest body, string resource)
                    : base(service)
                {
                    Resource = resource;
                    Body = body;
                    InitParameters();
                }


                /// <summary>REQUIRED: The resource for which the policy is being specified. See the operation
                /// documentation for the appropriate value for this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Resource { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.CloudRuntimeConfig.v1beta1.Data.SetIamPolicyRequest Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "setIamPolicy"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+resource}:setIamPolicy"; }
                }

                /// <summary>Initializes SetIamPolicy parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "resource", new Google.Apis.Discovery.Parameter
                        {
                            Name = "resource",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/configs/[^/]+$",
                        });
                }

            }

            /// <summary>Returns permissions that a caller has on the specified resource. If the resource does not
            /// exist, this will return an empty set of permissions, not a NOT_FOUND error.
            ///
            /// Note: This operation is designed to be used for building permission-aware UIs and command-line tools,
            /// not for authorization checking. This operation may "fail open" without warning.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="resource">REQUIRED: The resource for which the policy detail is being requested. See the operation
            /// documentation for the appropriate value for this field.</param>
            public virtual TestIamPermissionsRequest TestIamPermissions(Google.Apis.CloudRuntimeConfig.v1beta1.Data.TestIamPermissionsRequest body, string resource)
            {
                return new TestIamPermissionsRequest(service, body, resource);
            }

            /// <summary>Returns permissions that a caller has on the specified resource. If the resource does not
            /// exist, this will return an empty set of permissions, not a NOT_FOUND error.
            ///
            /// Note: This operation is designed to be used for building permission-aware UIs and command-line tools,
            /// not for authorization checking. This operation may "fail open" without warning.</summary>
            public class TestIamPermissionsRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.TestIamPermissionsResponse>
            {
                /// <summary>Constructs a new TestIamPermissions request.</summary>
                public TestIamPermissionsRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudRuntimeConfig.v1beta1.Data.TestIamPermissionsRequest body, string resource)
                    : base(service)
                {
                    Resource = resource;
                    Body = body;
                    InitParameters();
                }


                /// <summary>REQUIRED: The resource for which the policy detail is being requested. See the operation
                /// documentation for the appropriate value for this field.</summary>
                [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Resource { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.CloudRuntimeConfig.v1beta1.Data.TestIamPermissionsRequest Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "testIamPermissions"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+resource}:testIamPermissions"; }
                }

                /// <summary>Initializes TestIamPermissions parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "resource", new Google.Apis.Discovery.Parameter
                        {
                            Name = "resource",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/configs/[^/]+$",
                        });
                }

            }

            /// <summary>Updates a RuntimeConfig resource. The configuration must exist beforehand.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="name">The name of the RuntimeConfig resource to update, in the format:
            ///
            /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</param>
            public virtual UpdateRequest Update(Google.Apis.CloudRuntimeConfig.v1beta1.Data.RuntimeConfig body, string name)
            {
                return new UpdateRequest(service, body, name);
            }

            /// <summary>Updates a RuntimeConfig resource. The configuration must exist beforehand.</summary>
            public class UpdateRequest : CloudRuntimeConfigBaseServiceRequest<Google.Apis.CloudRuntimeConfig.v1beta1.Data.RuntimeConfig>
            {
                /// <summary>Constructs a new Update request.</summary>
                public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudRuntimeConfig.v1beta1.Data.RuntimeConfig body, string name)
                    : base(service)
                {
                    Name = name;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The name of the RuntimeConfig resource to update, in the format:
                ///
                /// `projects/[PROJECT_ID]/configs/[CONFIG_NAME]`</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.CloudRuntimeConfig.v1beta1.Data.RuntimeConfig Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "update"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "PUT"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+name}"; }
                }

                /// <summary>Initializes Update parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/configs/[^/]+$",
                        });
                }

            }
        }
    }
}

namespace Google.Apis.CloudRuntimeConfig.v1beta1.Data
{    

    /// <summary>Associates `members` with a `role`.</summary>
    public class Binding : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies the identities requesting access for a Cloud Platform resource. `members` can have the
        /// following values:
        ///
        /// * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google
        /// account.
        ///
        /// * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google
        /// account or a service account.
        ///
        /// * `user:{emailid}`: An email address that represents a specific Google account. For example,
        /// `alice@gmail.com` or `joe@example.com`.
        ///
        /// * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-
        /// app@appspot.gserviceaccount.com`.
        ///
        /// * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`.
        ///
        /// * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example,
        /// `google.com` or `example.com`.
        ///
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("members")]
        public virtual System.Collections.Generic.IList<string> Members { get; set; } 

        /// <summary>Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
        /// Required</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("role")]
        public virtual string Role { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A Cardinality condition for the Waiter resource. A cardinality condition is met when the number of
    /// variables under a specified path prefix reaches a predefined number. For example, if you set a Cardinality
    /// condition where the `path` is set to `/foo` and the number of paths is set to 2, the following variables would
    /// meet the condition in a RuntimeConfig resource:
    ///
    /// + `/foo/variable1 = "value1"` + `/foo/variable2 = "value2"` + `/bar/variable3 = "value3"`
    ///
    /// It would not would not satisify the same condition with the `number` set to 3, however, because there is only 2
    /// paths that start with `/foo`. Cardinality conditions are recursive; all subtrees under the specific path prefix
    /// are counted.</summary>
    public class Cardinality : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The number variables under the `path` that must exist to meet this condition. Defaults to 1 if not
        /// specified.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("number")]
        public virtual System.Nullable<int> Number { get; set; } 

        /// <summary>The root of the variable subtree to monitor. For example, `/foo`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("path")]
        public virtual string Path { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A
    /// typical example is to use it as the request or the response type of an API method. For instance:
    ///
    /// service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
    ///
    /// The JSON representation for `Empty` is empty JSON object `{}`.</summary>
    public class Empty : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The condition that a Waiter resource is waiting for.</summary>
    public class EndCondition : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The cardinality of the `EndCondition`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cardinality")]
        public virtual Cardinality Cardinality { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>`ListConfigs()` returns the following response. The order of returned objects is arbitrary; that is, it
    /// is not ordered in any particular way.</summary>
    public class ListConfigsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of the configurations in the project. The order of returned objects is arbitrary; that is,
        /// it is not ordered in any particular way.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("configs")]
        public virtual System.Collections.Generic.IList<RuntimeConfig> Configs { get; set; } 

        /// <summary>This token allows you to get the next page of results for list requests. If the number of results
        /// is larger than `pageSize`, use the `nextPageToken` as a value for the query parameter `pageToken` in the
        /// next list request. Subsequent list requests will have their own `nextPageToken` to continue paging through
        /// the results</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response for the `ListVariables()` method.</summary>
    public class ListVariablesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>This token allows you to get the next page of results for list requests. If the number of results
        /// is larger than `pageSize`, use the `nextPageToken` as a value for the query parameter `pageToken` in the
        /// next list request. Subsequent list requests will have their own `nextPageToken` to continue paging through
        /// the results</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>A list of variables and their values. The order of returned variable objects is
        /// arbitrary.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variables")]
        public virtual System.Collections.Generic.IList<Variable> Variables { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response for the `ListWaiters()` method. Order of returned waiter objects is arbitrary.</summary>
    public class ListWaitersResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>This token allows you to get the next page of results for list requests. If the number of results
        /// is larger than `pageSize`, use the `nextPageToken` as a value for the query parameter `pageToken` in the
        /// next list request. Subsequent list requests will have their own `nextPageToken` to continue paging through
        /// the results</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>Found waiters in the project.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("waiters")]
        public virtual System.Collections.Generic.IList<Waiter> Waiters { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>This resource represents a long-running operation that is the result of a network API call.</summary>
    public class Operation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If the value is `false`, it means the operation is still in progress. If true, the operation is
        /// completed, and either `error` or `response` is available.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("done")]
        public virtual System.Nullable<bool> Done { get; set; } 

        /// <summary>The error result of the operation in case of failure or cancellation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("error")]
        public virtual Status Error { get; set; } 

        /// <summary>Service-specific metadata associated with the operation.  It typically contains progress
        /// information and common metadata such as create time. Some services might not provide such metadata.  Any
        /// method that returns a long-running operation should document the metadata type, if any.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual System.Collections.Generic.IDictionary<string,object> Metadata { get; set; } 

        /// <summary>The server-assigned name, which is only unique within the same service that originally returns it.
        /// If you use the default HTTP mapping, the `name` should have the format of
        /// `operations/some/unique/name`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The normal response of the operation in case of success.  If the original method returns no data on
        /// success, such as `Delete`, the response is `google.protobuf.Empty`.  If the original method is standard
        /// `Get`/`Create`/`Update`, the response should be the resource.  For other methods, the response should have
        /// the type `XxxResponse`, where `Xxx` is the original method name.  For example, if the original method name
        /// is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("response")]
        public virtual System.Collections.Generic.IDictionary<string,object> Response { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies
    /// for Cloud Platform resources.
    ///
    /// A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the
    /// members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of
    /// permissions defined by IAM.
    ///
    /// **Example**
    ///
    /// { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com",
    /// "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer",
    /// "members": ["user:sean@example.com"] } ] }
    ///
    /// For a description of IAM and its features, see the [IAM developer's
    /// guide](https://cloud.google.com/iam).</summary>
    public class Policy : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same
        /// `role`. `bindings` with no members will result in an error.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bindings")]
        public virtual System.Collections.Generic.IList<Binding> Bindings { get; set; } 

        /// <summary>`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of
        /// a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the
        /// read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned
        /// in the response to `getIamPolicy`, and systems are expected to put that etag in the request to
        /// `setIamPolicy` to ensure that their change will be applied to the same version of the policy.
        ///
        /// If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten
        /// blindly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>Version of the `Policy`. The default version is 0.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual System.Nullable<int> Version { get; set; } 

    }    

    /// <summary>A RuntimeConfig resource is the primary resource in the Cloud RuntimeConfig service. A RuntimeConfig
    /// resource consists of metadata and a hierarchy of variables.</summary>
    public class RuntimeConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An optional description of the RuntimeConfig object.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The resource name of a runtime config. The name must have the format:
        ///
        /// projects/[PROJECT_ID]/configs/[CONFIG_NAME]
        ///
        /// The `[PROJECT_ID]` must be a valid project ID, and `[CONFIG_NAME]` is an arbitrary name that matches RFC
        /// 1035 segment specification. The length of `[CONFIG_NAME]` must be less than 64 bytes.
        ///
        /// You pick the RuntimeConfig resource name, but the server will validate that the name adheres to this format.
        /// After you create the resource, you cannot change the resource's name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for `SetIamPolicy` method.</summary>
    public class SetIamPolicyRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to
        /// a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects)
        /// might reject them.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("policy")]
        public virtual Policy Policy { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The `Status` type defines a logical error model that is suitable for different programming
    /// environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). The error model
    /// is designed to be:
    ///
    /// - Simple to use and understand for most users - Flexible enough to meet unexpected needs
    ///
    /// # Overview
    ///
    /// The `Status` message contains three pieces of data: error code, error message, and error details. The error code
    /// should be an enum value of google.rpc.Code, but it may accept additional error codes if needed.  The error
    /// message should be a developer-facing English message that helps developers *understand* and *resolve* the error.
    /// If a localized user-facing error message is needed, put the localized message in the error details or localize
    /// it in the client. The optional error details may contain arbitrary information about the error. There is a
    /// predefined set of error detail types in the package `google.rpc` which can be used for common error conditions.
    ///
    /// # Language mapping
    ///
    /// The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire
    /// format. When the `Status` message is exposed in different client libraries and different wire protocols, it can
    /// be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped
    /// to some error codes in C.
    ///
    /// # Other uses
    ///
    /// The error model and the `Status` message can be used in a variety of environments, either with or without APIs,
    /// to provide a consistent developer experience across different environments.
    ///
    /// Example uses of this error model include:
    ///
    /// - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the
    /// normal response to indicate the partial errors.
    ///
    /// - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error
    /// reporting purpose.
    ///
    /// - Batch operations. If a client uses batch request and batch response, the `Status` message should be used
    /// directly inside batch response, one for each error sub-response.
    ///
    /// - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of
    /// those operations should be represented directly using the `Status` message.
    ///
    /// - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any
    /// stripping needed for security/privacy reasons.</summary>
    public class Status : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The status code, which should be an enum value of google.rpc.Code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual System.Nullable<int> Code { get; set; } 

        /// <summary>A list of messages that carry the error details.  There will be a common set of message types for
        /// APIs to use.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("details")]
        public virtual System.Collections.Generic.IList<System.Collections.Generic.IDictionary<string,object>> Details { get; set; } 

        /// <summary>A developer-facing error message, which should be in English. Any user-facing error message should
        /// be localized and sent in the google.rpc.Status.details field, or localized by the client.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for `TestIamPermissions` method.</summary>
    public class TestIamPermissionsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or
        /// 'storage.*') are not allowed. For more information see [IAM
        /// Overview](https://cloud.google.com/iam/docs/overview#permissions).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("permissions")]
        public virtual System.Collections.Generic.IList<string> Permissions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response message for `TestIamPermissions` method.</summary>
    public class TestIamPermissionsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A subset of `TestPermissionsRequest.permissions` that the caller is allowed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("permissions")]
        public virtual System.Collections.Generic.IList<string> Permissions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Describes a single variable within a RuntimeConfig resource. The name denotes the hierarchical variable
    /// name. For example, `ports/serving_port` is a valid variable name. The variable value is an opaque string and
    /// only leaf variables can have values (that is, variables that do not have any child variables).</summary>
    public class Variable : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the variable resource, in the format:
        ///
        /// projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]
        ///
        /// The `[PROJECT_ID]` must be a valid project ID, `[CONFIG_NAME]` must be a valid RuntimeConfig reource and
        /// `[VARIABLE_NAME]` follows Unix file system file path naming.
        ///
        /// The `[VARIABLE_NAME]` can contain ASCII letters, numbers, slashes and dashes. Slashes are used as path
        /// element separators and are not part of the `[VARIABLE_NAME]` itself, so `[VARIABLE_NAME]` must contain at
        /// least one non-slash character. Multiple slashes are coalesced into single slash character. Each path segment
        /// should follow RFC 1035 segment specification. The length of a `[VARIABLE_NAME]` must be less than 256 bytes.
        ///
        /// Once you create a variable, you cannot change the variable name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>[Ouput only] The current state of the variable. The variable state indicates the outcome of the
        /// `variables().watch` call and is visible through the `get` and `list` calls.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("state")]
        public virtual string State { get; set; } 

        /// <summary>The string value of the variable. The length of the value must be less than 4096 bytes. Empty
        /// values are also accepted. For example, `text: "my text value"`. The string must be valid UTF-8.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("text")]
        public virtual string Text { get; set; } 

        /// <summary>[Output Only] The time of the last variable update.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateTime")]
        public virtual object UpdateTime { get; set; } 

        /// <summary>The binary value of the variable. The length of the value must be less than 4096 bytes. Empty
        /// values are also accepted. The value must be base64 encoded. Only one of `value` or `text` can be
        /// set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A Waiter resource waits for some end condition within a RuntimeConfig resource to be met before it
    /// returns. For example, assume you have a distributed system where each node writes to a Variable resource
    /// indidicating the node's readiness as part of the startup process.
    ///
    /// You then configure a Waiter resource with the success condition set to wait until some number of nodes have
    /// checked in. Afterwards, your application runs some arbitrary code after the condition has been met and the
    /// waiter returns successfully.
    ///
    /// Once created, a Waiter resource is immutable.
    ///
    /// To learn more about using waiters, read the [Creating a Waiter](/deployment-manager/runtime-
    /// configurator/creating-a-waiter) documentation.</summary>
    public class Waiter : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output Only] The instant at which this Waiter resource was created. Adding the value of `timeout`
        /// to this instant yields the timeout deadline for the waiter.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual object CreateTime { get; set; } 

        /// <summary>[Output Only] If the value is `false`, it means the waiter is still waiting for one of its
        /// conditions to be met.
        ///
        /// If true, the waiter has finished. If the waiter finished due to a timeout or failure, `error` will be
        /// set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("done")]
        public virtual System.Nullable<bool> Done { get; set; } 

        /// <summary>[Output Only] If the waiter ended due to a failure or timeout, this value will be set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("error")]
        public virtual Status Error { get; set; } 

        /// <summary>[Optional] The failure condition of this waiter. If this condition is met, `done` will be set to
        /// `true` and the `error` code will be set to `ABORTED`. The failure condition takes precedence over the
        /// success condition. If both conditions are met, a failure will be indicated. This value is optional; if no
        /// failure condition is set, the only failure scenario will be a timeout.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("failure")]
        public virtual EndCondition Failure { get; set; } 

        /// <summary>The name of the Waiter resource, in the format:
        ///
        /// projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]
        ///
        /// The `[PROJECT_ID]` must be a valid Google Cloud project ID, the `[CONFIG_NAME]` must be a valid
        /// RuntimeConfig resource, the `[WAITER_NAME]` must match RFC 1035 segment specification, and the length of
        /// `[WAITER_NAME]` must be less than 64 bytes.
        ///
        /// After you create a Waiter resource, you cannot change the resource name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>[Required] The success condition. If this condition is met, `done` will be set to `true` and the
        /// `error` value will remain unset. The failure condition takes precedence over the success condition. If both
        /// conditions are met, a failure will be indicated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("success")]
        public virtual EndCondition Success { get; set; } 

        /// <summary>[Required] Specifies the timeout of the waiter in seconds, beginning from the instant that
        /// `waiters().create` method is called. If this time elapses before the success or failure conditions are met,
        /// the waiter fails and sets the `error` code to `DEADLINE_EXCEEDED`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timeout")]
        public virtual object Timeout { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request for the `WatchVariable()` method.</summary>
    public class WatchVariableRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If specified, checks the current timestamp of the variable and if the current timestamp is newer
        /// than `newerThan` timestamp, the method returns immediately.
        ///
        /// If not specified or the variable has an older timestamp, the watcher waits for a the value to change before
        /// returning.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("newerThan")]
        public virtual object NewerThan { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
